Prompt 寫得再好,AI 也不知道一份「蔥鹽雞肉沙拉」的真實碳水量
Day19 講完 hallucination 的本質:為什麼不能相信 AI 給的營養數字。這篇要再往前問一步——AI 為什麼會給錯? 很多時候不是它不夠聰明,而是它手上根本沒有正確答案可以參考。
「知識」跟「事實」是兩種不同的東西
AI 學到的是「知識」:漢堡大概是高熱量食物、蔬菜大多低熱量,這類常識它很清楚。但系統需要的是「事實」:某一家店的某一個品項,精確是幾大卡、幾克蛋白質。這種具體數字,只有品牌官網的營養標示才有,AI 沒看過,也不可能生成出正確的版本。
可以用考試來比喻:閉卷考試靠記憶作答,開書考試可以翻課本查表。 早期的菜單生成,等於叫 AI 閉卷回答;後來的做法,是幫它把課本準備好。
什麼是 grounding?拆開來看
ground 原本是「地面、根基」的意思。AI 沒有依據時,答案像是飄在空中,不知道是真是假;grounding 就是把答案「落到地面」,給它一個可以踩穩、可以回頭核對的基礎。這個觀念只有三步:
用這個專案的例子對照看看(示意):
沒有 grounding(閉卷):
問 AI:「幫我安排今天的午餐。」
AI 答:「建議吃鮪魚飯糰,約 180 大卡。」 ← 哪一家的飯糰?180 從哪來?沒人知道
有 grounding(開書):
問 AI:「這是今天的候選食物清單(附編號與官方標示),請從裡面挑午餐。」
AI 答:「我選編號 711-001。」 ← 程式用這個編號查回真實的營養資料
差別不在於 AI 變聰明了,而是答案的來源變了:原本是 AI 腦裡的印象,現在是我們手上有出處、可以查的資料。
兩件常見的誤解:
(補充:這類「先找資料、再給 AI 回答」的做法,常會聽到 RAG 這個名詞,概念相近。初學時先記住 grounding 這個「讓答案有依據」的核心就夠了。)
那讓 AI 自己上網搜尋,不行嗎?
不過依據平常用 ChatGPT 的經驗,它明明有時也會到網路搜尋資料,還會顯示「正在搜尋某某網站」。這其實也是 grounding 的一種(有人稱為搜尋式 grounding),所以「AI 查資料」這件事本身是真的存在、也有用的。那為什麼這個專案還要自己建一份 Food DB?因為搜尋只解決了「AI 手上有沒有資料」,沒有解決下面這幾件事:
簡單說,搜尋是「請 AI 自己去圖書館找書」,而 Food DB 是「我們先把正確的書擺在它桌上,而且只讓它從這幾本挑」。
早期版本:AI 自己估算,哪裡出了問題
最早的菜單生成,AI 只能靠自己的知識估算「一個麥當勞漢堡大概有多少熱量」。對簡單的食物(一顆蛋、一片吐司)還算堪用;但對複合菜色(一個漢堡、一個便當)風險就很大,因為 AI 對「這個品牌的這個品項」根本沒有精確資料,它給的數字本質上是憑常識推測,跟「查表得到的真實數字」是兩回事。
後來的轉變:建一份真實食物資料庫(Food DB)
解決 hallucination 不能只靠「叫 AI 小心一點」或「把 prompt 寫得更精確」。真正的解法是給它一份可信的資料可以查:把品牌官網的營養標示整理成資料庫,菜單生成時先從裡面篩出候選食物,AI 只負責在候選清單裡挑選(這就是 Day15 講的第二次呼叫的輸入之一)。
| 比較項目 | 早期版本 | 加入 Food DB 之後 |
|---|---|---|
| AI 的角色 | 憑印象估算食物的營養 | 從已知正確的候選清單裡挑選 |
| 數字的來源 | AI 的常識推測 | 品牌官網的營養標示 |
| 風險 | 複合菜色的數字容易失真 | 數字有出處,可以回頭查證 |
這篇的重點是一個心態上的轉變:AI 最大的問題不一定是它不夠聰明,而是它手上沒有正確答案。 與其期待 AI 生成事實,不如先把事實準備好,再遞給它。接下來要分享的,就是這份 Food DB 從設計、蒐集到存放的完整過程,下一篇先從「資料要長什麼樣子」開始。